
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2006</p>
 * <p>CreateTime: 2006-4-12 </p>
 * @author pengz
 * @version 1.0
 */


package cn.agiledata.bank.myspace.bean;

import java.math.BigDecimal;
import java.util.Date;

import cn.agiledata.bank.common.util.Constant;
import cn.agiledata.bank.common.util.ForeDict;
import cn.agiledata.bank.common.util.WeatherUtil;
import cn.agiledata.bank.hibernateBean.Account;
import cn.agiledata.bank.hibernateBean.SubAccount;
import cn.agiledata.bank.hibernateBean.Transaction;
import cn.agiledata.bank.transaction.service.FeeRatioInterf;
import com.vnv.infrastructure.logic.IPBMgrFactory;

public class AccountQueryBean {
	Account a =null;
	SubAccount s=null;
	Transaction t =null;
		
		public AccountQueryBean (){}
		public AccountQueryBean (SubAccount s, Transaction t){
			this.s=s;
			this.t=t;
			this.a=s.getAccount();
		}
		public AccountQueryBean (Account a,Transaction t){
			this.a=a;
			this.t=t;
		}
		public AccountQueryBean (SubAccount s, Account a, Transaction t){
			this.s=s;
			this.a=a;
			this.t=t;
		}
		
		public String Aid;
		public String Tid;
		public Date date;
		public String orderId;		//商户订单号
		public String transId;		//交易号
		public String actionType;//操作类型
		public String otherAccount; //交易对方
		public String otherAccountEmail;	//交易对方
		public String otherAccountId;
		public String transStatus;//交易状态
		public String payMode;//付款类型(收/付)
		public Double amount;//金额
		public String fee;//费用
		public String tradeType; //交易模式
		public String startPage; //起始页
		



		public String getAid() {
			return a.getId()+"";
		}
		public String getTid() {
			return t.getId()+"";
		}

//		交易金额
		public Double getAmount() {
			//2007-12-5由zxj修改，返回交易金额的绝对值
			double d = Math.abs(t.getAmount().doubleValue());
			return new Double(d);
			//return t.getAmount();
		}
		
		public Date getDate() {
			return t.getUpdateTime();
		}
		
		public String getOrderId() {
			return t.getOrderId();
		}
		
//		交易号		
		public String getTransId() {
			return t.getTransId();
		}
		
//		操作类型
		public String getActionType() {
			return t.getActionType().getActionName();
		}
//		交易对方
		public String getOtherAccount() {
//			if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_A)) { //充值
//				BankTemplate bt = (BankTemplate)IPBAppFactory.getObj("bankTemplate");
//				return ((BankInfo)bt.getBankInfo(t.getBankSeq().toString())).getBankName();
//			} else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_B)) { //线下充值
//				BankTemplate bt = (BankTemplate)IPBAppFactory.getObj("bankTemplate");
//				if(t.getBankSeq().longValue() != 0) { //银行汇款
//					return ((BankInfo)bt.getBankInfo(t.getBankSeq().toString())).getBankName();	
//				} else { //邮局汇款
//					return "邮局";
//				}
//			}else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_C)) { //账户间交易显示对方email
//				if(t.getCredit().getAccount().getId().equals(a.getId())){
//					if(t.getDebit().getAccount().getEmail()!=null){
//						return t.getDebit().getAccount().getEmail();
//					}else{
//						return t.getDebit().getAccount().getMobile();
//					}
//				}else{
//					if(t.getCredit().getAccount().getEmail()!=null){
//						return t.getCredit().getAccount().getEmail();
//					}else{
//						return t.getCredit().getAccount().getMobile();
//					}
//				}
//			}else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_D)) { //提现
//				return a.getName();
//			} else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_F)) { //银行付款给对方账户
//				return t.getPersonName();
//			} else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_G)) { //账户付款给对方银行
//				return t.getPersonName();
//			} else if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_H)) { //内部账户转账
//				return a.getName();
//			} else {
//				return "";
//			}
			if(t.getCredit().getAccount().getId().equals(a.getId())) return WeatherUtil.getNameOrEmailOrMobileByAccount(t.getDebit().getAccount());
			else return WeatherUtil.getNameOrEmailOrMobileByAccount(t.getCredit().getAccount());
		}
		
		public String getOtherAccountEmail() {
			if(t.getCredit().getAccount().getId().equals(a.getId())) return t.getDebit().getAccount().getEmail() == null?t.getDebit().getAccount().getMobile():t.getDebit().getAccount().getEmail();
			else return t.getCredit().getAccount().getEmail() == null?t.getCredit().getAccount().getMobile():t.getCredit().getAccount().getEmail();			
		}
		
		public String getOtherAccountId() {
			if(t.getCredit().getAccount().getId().equals(a.getId())) return t.getDebit().getAccount().getId().toString();
			else return t.getCredit().getAccount().getId().toString();
		}


//		交易状态
		public String getTransStatus() {
			return t.getTransStatus();
		}
//		付款类型(收/付)
		public String getPayMode() {
			if(t.getAmount().doubleValue() >= 0) {
				if(t.getCredit().getAccount().getId().equals(a.getId())) return "收";
				else return "付";
			} else {
				if(t.getCredit().getAccount().getId().equals(a.getId())) return "付";
				else return "收";				
			}
		}

//		手续费		
		public String getFee(){
			//2007-12-5由zxj修改，新增计算账户间交易非最终状态(非交易成功，非退款成功，非交易失败，非交易取消)下的收款方手续费
			//并且不管是收款方手续费还是付款方手续费，返回值都是取手续费的绝对值
			Double transFee = null;
			if(t.getCredit().getAccount().getId().equals(a.getId())) transFee = this.getCreditFee();
			else transFee = t.getDebitFee();
			
			double d = Math.abs(transFee.doubleValue());
			return String.valueOf(d);
		}
//		交易模式
		
		public String getTradeType(){
			if(t.getActionType().getId().toString().equals(Constant.ACTION_TYPE_C)) { //账户间交易显示交易模式
				return t.getTradeType();
			} else {
				return "";
			}
		}
		
		public Account getA() {
			return a;
		}
		public void setA(Account a) {
			this.a = a;
		}
		public Transaction getT() {
			return t;
		}
		public void setT(Transaction t) {
			this.t = t;
		}
		
		public SubAccount getS() {
			return s;
		}
		public void setS(SubAccount s){
			this.s=s;
		}
		public void setOtherAccountEmail(String otherAccountEmail) {
			this.otherAccountEmail = otherAccountEmail;
		}
		
		//2007-12-5由zxj新增，计算账户间交易非最终状态(非交易成功，非退款成功，非交易失败，非交易取消)下的收款方手续费
		private Double getCreditFee() {
			//交易类型：账户间交易
			if (Constant.ACTION_TYPE_C.equals(t.getActionType().getId().toString())) {
				if (!Constant.TRANS_STATUS_TRANSACTIONSUCCESS.equals(t.getTransStatus()) && 
					!Constant.TRANS_STATUS_REFUNDSUCC.equals(t.getTransStatus()) && 
					!Constant.TRANS_STATUS_TRANSACTIONFAIL.equals(t.getTransStatus()) && 
					!Constant.TRANS_STATUS_TRANSACTIONCLOSE.equals(t.getTransStatus())) {
					//交易状态为：除了最终状态(交易成功，退款成功，交易失败，交易取消)的所有状态
					//在非最终状态下并未实际发生向收款方收取手续费的动作，因此其t.getCreditFee()均为0；
					//为了展现非最终状态下假设交易成功收款方需要付出的手续费，只能在此处重新计算creditFee
					double creditFee = getFeeRatioService().getCreditFee(null, t.getCredit().getAccount(),
							Constant.ACTION_TYPE_C, t.getAmount());
					return new Double(creditFee);
				}
			}
			
			return t.getCreditFee();
		}
		
		private FeeRatioInterf getFeeRatioService() {
			return (FeeRatioInterf) IPBMgrFactory.getMgr(ForeDict.SERVICE_FEE_RATIO);
		}
}
